<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>std::char_traits - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">
<link rel="shortcut icon" href="../../../common/favicon.ico">
<link rel="stylesheet" href="../../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"cpp/string/char_traits","wgTitle":"cpp/string/char traits","wgCurRevisionId":120089,"wgArticleId":2238,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"cpp/string/char_traits","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1,"gadget-MathJax":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:9f05c6caceb9bb1a482b6cebd4c5a330 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-cpp {line-height: normal;}
.source-cpp li, .source-cpp pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for cpp
 * CSS class: source-cpp, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.cpp.source-cpp .de1, .cpp.source-cpp .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.cpp.source-cpp  {font-family:monospace;}
.cpp.source-cpp .imp {font-weight: bold; color: red;}
.cpp.source-cpp li, .cpp.source-cpp .li1 {font-weight: normal; vertical-align:top;}
.cpp.source-cpp .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.cpp.source-cpp .li2 {font-weight: bold; vertical-align:top;}
.cpp.source-cpp .kw1 {color: #0000dd;}
.cpp.source-cpp .kw2 {color: #0000ff;}
.cpp.source-cpp .kw3 {color: #0000dd;}
.cpp.source-cpp .kw4 {color: #0000ff;}
.cpp.source-cpp .co1 {color: #909090;}
.cpp.source-cpp .co2 {color: #339900;}
.cpp.source-cpp .coMULTI {color: #ff0000; font-style: italic;}
.cpp.source-cpp .es0 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es1 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es2 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es3 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es4 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es5 {color: #008000; font-weight: bold;}
.cpp.source-cpp .br0 {color: #008000;}
.cpp.source-cpp .sy0 {color: #008000;}
.cpp.source-cpp .sy1 {color: #000080;}
.cpp.source-cpp .sy2 {color: #000040;}
.cpp.source-cpp .sy3 {color: #000040;}
.cpp.source-cpp .sy4 {color: #008080;}
.cpp.source-cpp .st0 {color: #008000;}
.cpp.source-cpp .nu0 {color: #000080;}
.cpp.source-cpp .nu6 {color: #000080;}
.cpp.source-cpp .nu8 {color: #000080;}
.cpp.source-cpp .nu12 {color: #000080;}
.cpp.source-cpp .nu16 {color:#000080;}
.cpp.source-cpp .nu17 {color:#000080;}
.cpp.source-cpp .nu18 {color:#000080;}
.cpp.source-cpp .nu19 {color:#000080;}
.cpp.source-cpp .ln-xtra, .cpp.source-cpp li.ln-xtra, .cpp.source-cpp div.ln-xtra {background-color: #ffc;}
.cpp.source-cpp span.xtra { display:block; }

/*]]>*/
</style><style type="text/css">/*<![CDATA[*/
.source-text {line-height: normal;}
.source-text li, .source-text pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for text
 * CSS class: source-text, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.text.source-text .de1, .text.source-text .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.text.source-text  {font-family:monospace;}
.text.source-text .imp {font-weight: bold; color: red;}
.text.source-text li, .text.source-text .li1 {font-weight: normal; vertical-align:top;}
.text.source-text .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.text.source-text .li2 {font-weight: bold; vertical-align:top;}
.text.source-text .ln-xtra, .text.source-text li.ln-xtra, .text.source-text div.ln-xtra {background-color: #ffc;}
.text.source-text span.xtra { display:block; }

/*]]>*/
</style><!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]--></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_string_char_traits skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        <!-- /header -->
        <!-- content -->
<div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::</span>char_traits</h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../cpp.html" title="cpp">cpp</a>‎ | <a href="../string.html" title="cpp/string">string</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="t-navbar" style=""><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../../cpp.html" title="cpp"> C++</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../compiler_support.html" title="cpp/compiler support"> Compiler support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../freestanding.html" title="cpp/freestanding"> Freestanding and hosted</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../language.html" title="cpp/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="cpp/header"> Standard library headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../named_req.html" title="cpp/named req"> Named requirements </a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../feature_test.html" title="cpp/feature test"> Feature test macros </a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../utility.html#Language_support" title="cpp/utility"> Language support library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../concepts.html" title="cpp/concepts"> Concepts library</a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../meta.html" title="cpp/meta"> Metaprogramming library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../error.html" title="cpp/error"> Diagnostics library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../utility.html" title="cpp/utility"> General utilities library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="cpp/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../container.html" title="cpp/container"> Containers library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../iterator.html" title="cpp/iterator"> Iterators library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../ranges.html" title="cpp/ranges"> Ranges library</a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="cpp/algorithm"> Algorithms library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="cpp/numeric"> Numerics library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="cpp/locale"> Localizations library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="cpp/io"> Input/output library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../filesystem.html" title="cpp/filesystem"> Filesystem library</a> <span class="t-mark-rev t-since-cxx17">(C++17)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../regex.html" title="cpp/regex"> Regular expressions library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="cpp/thread"> Concurrency support library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="cpp/experimental"> Technical specifications</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../symbol_index.html" title="cpp/symbol index"> Symbols index</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../links/libs.html" title="cpp/links/libs"> External libraries</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../string.html" title="cpp/string"> Strings library</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h1"><td colspan="5"> Null-terminated strings</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="byte.html" title="cpp/string/byte"> Byte strings</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="multibyte.html" title="cpp/string/multibyte"> Multibyte strings</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="wide.html" title="cpp/string/wide"> Wide strings</a> </td></tr>
<tr class="t-nv-h1"><td colspan="5"> Classes</td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="basic_string.html" title="cpp/string/basic string"><span class="t-lines"><span>basic_string</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="basic_string_view.html" title="cpp/string/basic string view"><span class="t-lines"><span>basic_string_view</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><strong class="selflink"><span class="t-lines"><span>char_traits</span></span></strong></div></div></td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><strong class="selflink"><tt>std::char_traits</tt></strong><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h1"><td colspan="5"> Member functions</td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/assign.html" title="cpp/string/char traits/assign"><span class="t-lines"><span>char_traits::assign</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/cmp.html" title="cpp/string/char traits/cmp"><span class="t-lines"><span>char_traits::eq</span><span>char_traits::lt</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/move.html" title="cpp/string/char traits/move"><span class="t-lines"><span>char_traits::move</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/copy.html" title="cpp/string/char traits/copy"><span class="t-lines"><span>char_traits::copy</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/compare.html" title="cpp/string/char traits/compare"><span class="t-lines"><span>char_traits::compare</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/length.html" title="cpp/string/char traits/length"><span class="t-lines"><span>char_traits::length</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/find.html" title="cpp/string/char traits/find"><span class="t-lines"><span>char_traits::find</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/to_char_type.html" title="cpp/string/char traits/to char type"><span class="t-lines"><span>char_traits::to_char_type</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/to_int_type.html" title="cpp/string/char traits/to int type"><span class="t-lines"><span>char_traits::to_int_type</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/eq_int_type.html" title="cpp/string/char traits/eq int type"><span class="t-lines"><span>char_traits::eq_int_type</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/eof.html" title="cpp/string/char traits/eof"><span class="t-lines"><span>char_traits::eof</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/not_eof.html" title="cpp/string/char traits/not eof"><span class="t-lines"><span>char_traits::not_eof</span></span></a></div></div></td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div></div>
<table class="t-dcl-begin"><tbody>
<tr class="t-dsc-header">
<td> <div>Defined in header <code><a href="../header/string.html" title="cpp/header/string">&lt;string&gt;</a></code>
 </div></td>
<td></td>
<td></td>
</tr>
<tr class="t-dcl">
<td class="t-dcl-nopad"> <div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1">&lt;</span><br>
<p>    <span class="kw1">class</span> CharT <br>
</p>
<span class="sy1">&gt;</span> <span class="kw1">class</span> char_traits<span class="sy4">;</span></span></div></td>
<td class="t-dcl-nopad">  </td>
<td class="t-dcl-nopad">  </td>
</tr>
<tr class="t-dcl-sep"><td></td><td></td><td></td></tr>
</tbody></table>
<p>The <code>char_traits</code> class is a traits class template that abstracts basic character and string operations for a given character type. The defined operation set is such that generic algorithms almost always can be implemented in terms of it. It is thus possible to use such algorithms with almost any possible character or string type, just by supplying a customized <code>char_traits</code> class.
</p><p>The <code>char_traits</code> class template serves as a basis for explicit instantiations. The user can <a href="../language/extending_std.html" title="cpp/language/extending std">provide a specialization</a> for any custom character types. Several specializations are defined for the standard character types.
</p><p>If an operation on traits emits an exception, the behavior is undefined.
</p>
<h3><span class="mw-headline" id="Standard_specializations">Standard specializations</span></h3>
<p>Member typedefs of standard specializations are as follows.
</p>
<table class="t-dsc-begin">

<tr class="t-dsc-hitem" style="text-align:center">
<th> Specialization
</th>
<th> <code>char_type</code>
</th>
<th> <code>int_type</code>
</th>
<th> <code>pos_type</code>
</th></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy1">&gt;</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::streampos</a></span>
</td></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">wchar_t</span><span class="sy1">&gt;</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">wchar_t</span></span></span>
</td>
<td> <span class="t-lc">std::wint_t</span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::wstreampos</a></span>
</td></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">char16_t</span><span class="sy1">&gt;</span></span></span> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char16_t</span></span></span>
</td>
<td> <span class="t-lc"><a href="../types/integer.html" title="cpp/types/integer">std::uint_least16_t</a></span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::u16streampos</a></span>
</td></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">char32_t</span><span class="sy1">&gt;</span></span></span> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char32_t</span></span></span>
</td>
<td> <span class="t-lc"><a href="../types/integer.html" title="cpp/types/integer">std::uint_least32_t</a></span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::u32streampos</a></span>
</td></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span>char8_t<span class="sy1">&gt;</span></span></span> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">char8_t</span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">int</span></span></span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::u8streampos</a></span>
</td></tr></table>
<table class="t-dsc-begin">

<tr class="t-dsc-hitem" style="text-align:center">
<th> Member type
</th>
<th> Definition (same among all standard specializations)
</th></tr>
<tr class="t-dsc">
<td> <code>off_type</code>
</td>
<td> <span class="t-lc"><a href="../io/streamoff.html" title="cpp/io/streamoff">std::streamoff</a></span>
</td></tr>
<tr class="t-dsc">
<td> <code>state_type</code>
</td>
<td> <span class="t-lc"><a href="multibyte/mbstate_t.html" title="cpp/string/multibyte/mbstate t">std::mbstate_t</a></span>
</td></tr>
<tr class="t-dsc">
<td> <code>comparison_category</code> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td>
<td> <span class="t-lc">std::strong_ordering</span>
</td></tr></table>
<p>The semantics of the member functions of standard specializations are defined are as follows.
</p>
<table class="t-dsc-begin">

<tr class="t-dsc-hitem" style="text-align:center">
<th> Specialization
</th>
<th> <code>assign</code>
</th>
<th> <code>eq</code>
</th>
<th> <code>lt</code>
</th>
<th> <code>eof</code>
</th></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy1">&gt;</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">=</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">==</span></span></span> for <code>unsigned char</code>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;</span></span></span> for <code>unsigned char</code>
</td>
<td> <span class="t-lc"><a href="../io/c.html" title="cpp/io/c">EOF</a></span>
</td></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">wchar_t</span><span class="sy1">&gt;</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">=</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">==</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;</span></span></span>
</td>
<td> <span class="t-lc">WEOF</span>
</td></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">char16_t</span><span class="sy1">&gt;</span></span></span> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">=</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">==</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;</span></span></span>
</td>
<td> invalid UTF-16 code unit
</td></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">char32_t</span><span class="sy1">&gt;</span></span></span> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">=</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">==</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;</span></span></span>
</td>
<td> invalid UTF-32 code unit
</td></tr>
<tr class="t-dsc">
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span>char8_t<span class="sy1">&gt;</span></span></span> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">=</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">==</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;</span></span></span>
</td>
<td> invalid UTF-8 code unit
</td></tr></table>
<p>Standard specializations of <code>char_traits</code> class template satisfy the requirements of <a href="../named_req/CharTraits.html" title="cpp/named req/CharTraits"><span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">CharTraits</span></a>.
</p>
<h3><span class="mw-headline" id="Member_types">Member types</span></h3>
<table class="t-dsc-begin">

<tr class="t-dsc-hitem">
<td>  Type
</td>
<td>  Definition
</td></tr>


<tr class="t-dsc">
<td>  <code>char_type</code>
</td>
<td>  <code>CharT</code>
</td></tr>


<tr class="t-dsc">
<td>  <code>int_type</code>
</td>
<td>  an integer type that can hold all values of <code>char_type</code> plus <code>EOF</code>
</td></tr>


<tr class="t-dsc">
<td>  <code>off_type</code>
</td>
<td>  <i>implementation-defined</i>
</td></tr>


<tr class="t-dsc">
<td>  <code>pos_type</code>
</td>
<td>  <i>implementation-defined</i>
</td></tr>


<tr class="t-dsc">
<td>  <code>state_type</code>
</td>
<td>  <i>implementation-defined</i>
</td></tr>

</table>
<h3><span class="mw-headline" id="Member_functions">Member functions</span></h3>
<table class="t-dsc-begin">

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/assign.html" title="cpp/string/char traits/assign"> <span class="t-lines"><span>assign</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   assigns a character <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/cmp.html" title="cpp/string/char traits/cmp"> <span class="t-lines"><span>eq</span><span>lt</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   compares two characters  <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/move.html" title="cpp/string/char traits/move"> <span class="t-lines"><span>move</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   moves one character sequence onto another <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/copy.html" title="cpp/string/char traits/copy"> <span class="t-lines"><span>copy</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   copies a character sequence <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/compare.html" title="cpp/string/char traits/compare"> <span class="t-lines"><span>compare</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   lexicographically compares two character sequences <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/length.html" title="cpp/string/char traits/length"> <span class="t-lines"><span>length</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   returns the length of a character sequence <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/find.html" title="cpp/string/char traits/find"> <span class="t-lines"><span>find</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   finds a character in a character sequence <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/to_char_type.html" title="cpp/string/char traits/to char type"> <span class="t-lines"><span>to_char_type</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   converts <code>int_type</code> to equivalent  <code>char_type</code> <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/to_int_type.html" title="cpp/string/char traits/to int type"> <span class="t-lines"><span>to_int_type</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   converts <code>char_type</code> to equivalent  <code>int_type</code> <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/eq_int_type.html" title="cpp/string/char traits/eq int type"> <span class="t-lines"><span>eq_int_type</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   compares two <code>int_type</code> values <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/eof.html" title="cpp/string/char traits/eof"> <span class="t-lines"><span>eof</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   returns an <i>eof</i> value <br> <span class="t-mark">(public static member function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="char_traits/not_eof.html" title="cpp/string/char traits/not eof"> <span class="t-lines"><span>not_eof</span></span></a></div><div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div></div>
</td>
<td>   checks whether a character is <i>eof</i> value <br> <span class="t-mark">(public static member function)</span> </td></tr>
</table>
<h3><span class="mw-headline" id="Example">Example</span></h3>
<div class="t-example"><p>User-defined character traits may be used to provide <a rel="nofollow" class="external text" href="http://www.gotw.ca/gotw/029.htm">case-insensitive comparison</a></p><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;string_view&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;cctype&gt;</span>
 
<span class="kw1">struct</span> ci_char_traits <span class="sy4">:</span> <span class="kw1">public</span> std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy1">&gt;</span> <span class="br0">{</span>
    <span class="kw4">static</span> <span class="kw4">char</span> to_upper<span class="br0">(</span><span class="kw4">char</span> ch<span class="br0">)</span> <span class="br0">{</span>
        <span class="kw1">return</span> std<span class="sy4">::</span><span class="me2">toupper</span><span class="br0">(</span><span class="br0">(</span><span class="kw4">unsigned</span> <span class="kw4">char</span><span class="br0">)</span> ch<span class="br0">)</span><span class="sy4">;</span>
    <span class="br0">}</span>
    <span class="kw4">static</span> <span class="kw4">bool</span> eq<span class="br0">(</span><span class="kw4">char</span> c1, <span class="kw4">char</span> c2<span class="br0">)</span> <span class="br0">{</span>
         <span class="kw1">return</span> to_upper<span class="br0">(</span>c1<span class="br0">)</span> <span class="sy1">==</span> to_upper<span class="br0">(</span>c2<span class="br0">)</span><span class="sy4">;</span>
     <span class="br0">}</span>
    <span class="kw4">static</span> <span class="kw4">bool</span> lt<span class="br0">(</span><span class="kw4">char</span> c1, <span class="kw4">char</span> c2<span class="br0">)</span> <span class="br0">{</span>
         <span class="kw1">return</span> to_upper<span class="br0">(</span>c1<span class="br0">)</span> <span class="sy1">&lt;</span>  to_upper<span class="br0">(</span>c2<span class="br0">)</span><span class="sy4">;</span>
    <span class="br0">}</span>
    <span class="kw4">static</span> <span class="kw4">int</span> compare<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> s1, <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> s2, <a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a> n<span class="br0">)</span> <span class="br0">{</span>
        <span class="kw1">while</span> <span class="br0">(</span> n<span class="sy2">--</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span> <span class="br0">)</span> <span class="br0">{</span>
            <span class="kw1">if</span> <span class="br0">(</span> to_upper<span class="br0">(</span><span class="sy2">*</span>s1<span class="br0">)</span> <span class="sy1">&lt;</span> to_upper<span class="br0">(</span><span class="sy2">*</span>s2<span class="br0">)</span> <span class="br0">)</span> <span class="kw1">return</span> <span class="sy2">-</span><span class="nu0">1</span><span class="sy4">;</span>
            <span class="kw1">if</span> <span class="br0">(</span> to_upper<span class="br0">(</span><span class="sy2">*</span>s1<span class="br0">)</span> <span class="sy1">&gt;</span> to_upper<span class="br0">(</span><span class="sy2">*</span>s2<span class="br0">)</span> <span class="br0">)</span> <span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span>
            <span class="sy2">++</span>s1<span class="sy4">;</span> <span class="sy2">++</span>s2<span class="sy4">;</span>
        <span class="br0">}</span>
        <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
    <span class="br0">}</span>
    <span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> find<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> s, <a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a> n, <span class="kw4">char</span> a<span class="br0">)</span> <span class="br0">{</span>
        <span class="kw4">auto</span> <span class="kw4">const</span> ua <span class="br0">(</span>to_upper<span class="br0">(</span>a<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
        <span class="kw1">while</span> <span class="br0">(</span> n<span class="sy2">--</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span> <span class="br0">)</span> 
        <span class="br0">{</span>
            <span class="kw1">if</span> <span class="br0">(</span>to_upper<span class="br0">(</span><span class="sy2">*</span>s<span class="br0">)</span> <span class="sy1">==</span> ua<span class="br0">)</span>
                <span class="kw1">return</span> s<span class="sy4">;</span>
            s<span class="sy2">++</span><span class="sy4">;</span>
        <span class="br0">}</span>
        <span class="kw1">return</span> nullptr<span class="sy4">;</span>
    <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> DstTraits, <span class="kw1">class</span> CharT, <span class="kw1">class</span> SrcTraits<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <a href="basic_string_view.html"><span class="kw1249">std::<span class="me2">basic_string_view</span></span></a><span class="sy1">&lt;</span>CharT, DstTraits<span class="sy1">&gt;</span>
    traits_cast<span class="br0">(</span><span class="kw4">const</span> <a href="basic_string_view.html"><span class="kw1249">std::<span class="me2">basic_string_view</span></span></a><span class="sy1">&lt;</span>CharT, SrcTraits<span class="sy1">&gt;</span> src<span class="br0">)</span> <span class="kw1">noexcept</span>
<span class="br0">{</span>
    <span class="kw1">return</span> <span class="br0">{</span>src.<span class="me1">data</span><span class="br0">(</span><span class="br0">)</span>, src.<span class="me1">size</span><span class="br0">(</span><span class="br0">)</span><span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">using</span> <span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">literals</span><span class="sy4">;</span>
 
    <span class="kw4">constexpr</span> <span class="kw4">auto</span> s1 <span class="sy1">=</span> <span class="st0">"Hello"</span>sv<span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">auto</span> s2 <span class="sy1">=</span> <span class="st0">"heLLo"</span>sv<span class="sy4">;</span>
 
    <span class="kw1">if</span> <span class="br0">(</span>traits_cast<span class="sy1">&lt;</span>ci_char_traits<span class="sy1">&gt;</span><span class="br0">(</span>s1<span class="br0">)</span> <span class="sy1">==</span> traits_cast<span class="sy1">&lt;</span>ci_char_traits<span class="sy1">&gt;</span><span class="br0">(</span>s2<span class="br0">)</span><span class="br0">)</span>
        <a href="../io/cout.html"><span class="kw1761">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> s1 <span class="sy1">&lt;&lt;</span> <span class="st0">" and "</span> <span class="sy1">&lt;&lt;</span> s2 <span class="sy1">&lt;&lt;</span> <span class="st0">" are equal<span class="es1">\n</span>"</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div></div>
<p>Output:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="text source-text"><pre class="de1">Hello and heLLo are equal</pre></div></div> 
</div>
<h3><span class="mw-headline" id="See_also">See also</span></h3>
<table class="t-dsc-begin">

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="basic_string.html" title="cpp/string/basic string"> <span class="t-lines"><span>basic_string</span></span></a></div></div>
</td>
<td>   stores and manipulates sequences of characters <br> <span class="t-mark">(class template)</span> </td></tr>
</table>

<!-- 
NewPP limit report
Preprocessor visited node count: 5032/1000000
Preprocessor generated node count: 10631/1000000
Post‐expand include size: 125163/2097152 bytes
Template argument size: 25980/2097152 bytes
Highest expansion depth: 20/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:2238-0!*!0!!en!*!* and timestamp 20220410085416 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="https://en.cppreference.com/mwiki/index.php?title=cpp/string/char_traits&amp;oldid=120089">https://en.cppreference.com/mwiki/index.php?title=cpp/string/char_traits&amp;oldid=120089</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        <div id="cpp-footer-base" class="noprint">
            <div id="footer">
                        <div id="cpp-navigation">
            <h5>Navigation</h5>
            <ul><li><a href="https://en.cppreference.com/w/cpp/string/char_traits">Online version</a></li><li>Offline version retrieved 2022-07-30 14:05.</li></ul></div>
                        <ul id="footer-info">
                                    <li id="footer-info-lastmod"> This page was last modified on 20 June 2020, at 21:12.</li>
                                    <li id="footer-info-viewcount">This page has been accessed 206,011 times.</li>
                            </ul>
                    </div>
        </div>
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler","ext.gadget.MathJax"], null, true);
}</script>
<script src="../../../common/site_scripts.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 3.185 secs. -->
	</body>
<!-- Cached 20220410085416 -->
</html>